package com.liuym.classes.repository.mapper;

import com.liuym.classes.repository.model.entity.ClassScore;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface ClassScoreMapper {
    int deleteByPrimaryKey(
            @Param("classScoreTableName") String classScoreTableName, @Param("id") Integer id);

    int insert(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("record") ClassScore record);

    int insertSelective(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("record") ClassScore record);

    ClassScore selectByPrimaryKey(
            @Param("classScoreTableName") String classScoreTableName, @Param("id") Integer id);

    int updateByPrimaryKeySelective(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("record") ClassScore record);

    int updateByPrimaryKey(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("record") ClassScore record);

    /**
     * 根据学号获得分数信息
     *
     * @param classNumber
     * @return
     */
    List<ClassScore> getClassScoreByClassNumber(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("classNumber") long classNumber);

    /**
     * 更新分数信息
     *
     * @param classScore
     * @return
     */
    int updateClassScore(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("classScore") ClassScore classScore);

    /**
     * 删除分数
     *
     * @param id
     * @return
     */
    int deleteClassScore(
            @Param("classScoreTableName") String classScoreTableName, @Param("id") int id);

    /**
     * 删除分数
     *
     * @param classNumber
     * @return
     */
    int deleteClassScoreByNumber(
            @Param("classScoreTableName") String classScoreTableName, @Param("classNumber") long classNumber);

    /**
     * 获得一定时间内的分数信息
     *
     * @param classScoreTableName
     * @param startTime
     * @param endTime
     * @return
     */
    List<ClassScore> getClassScoreByTime(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime);

    /**
     * 获得某个管理员操作的分数信息
     *
     * @param classScoreTableName
     * @param userName
     * @param startTime
     * @param endTime
     * @return
     */
    List<ClassScore> getClassScoreByAdmin(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("userName") String userName,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime);

    /**
     * 批量insert
     *
     * @param list
     */
    int addClassScoreList(
            @Param("classScoreTableName") String classScoreTableName,
            @Param("list") List<ClassScore> list);

    /**
     * 新建班级分数表
     *
     * @return
     */
    int addClassScoreTable(@Param("classScoreTableName") String classScoreTableName) throws Exception;

    /**
     * 查询某个班级历史分数信息
     *
     * @param startTime
     * @param endTime
     * @param classNumber
     * @return
     */
    List<ClassScore> findHistoryClassScore(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("classNumber") long classNumber);
}